﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

public partial class Archivo_FrSubirFormatos : System.Web.UI.Page
{

    
    protected void Page_Load(object sender, EventArgs e)
    {

        //-------------------------Lineas Agregadas para la seguridad----------------------------------------------------
        if (Session["nit"] != null)
            Response.Redirect("/SUEWebSite/Error.aspx");
        else if (Session["nomUsr"] != null)
        {
            List<String> Permisos = (List<String>)Session["Permisos"];
            if (!Permisos.Contains(System.IO.Path.GetFileName(HttpContext.Current.Request.FilePath)))
                Response.Redirect("/SUEWebSite/Error.aspx");
        }
        else Response.Redirect("/SUEWebSite/Principal.aspx");
        //-------------------------Lineas Agregadas para la seguridad----------------------------------------------------
        
        if (!Page.IsPostBack)
        {
            if (Request.QueryString["idArchivo"] != null && Request.QueryString["nombre"] != null)
                EliminarArchivo(Convert.ToInt32(Request.QueryString["idArchivo"]), Request.QueryString["nombre"]);
            if(Request.QueryString["nombre"] !=null)
                EliminarFormCarta(Request.QueryString["nombre"].ToString());

        }
        LabelNotificacion.Text = "Seleccione un archivo";
        BuscarArchivos();
        CargarFormatos();
    }

    /// <summary>
    /// Busca los archivos que se encuentran registrados en el sistema de tipo formatos
    /// Se muestra la información consultada, en el control Gridview1
    /// </summary>
       
    private void BuscarArchivos()
    {
        GestionarArchivos archivos = new GestionarArchivos();
        GridView1.DataSource = archivos.ConsultarArchivo("formatos");
        GridView1.DataBind();
    }

    /// <summary>
    /// Busca los archivos que se encuentran registrados en el sistema de tipo formatos cartas
    /// Se muestra la información consultada, en el control GridviewFormCartas
    /// </summary>

    private void CargarFormatos()
    {
        DirectoryInfo mydir = new DirectoryInfo(Server.MapPath("FormCartas"));
        GridViewFormCartas.DataSource = mydir.GetFiles();
        GridViewFormCartas.DataBind();
        limpiar();

    }

    /// <summary>
    /// Deshabilita los archivos que no corresponden a los subidos, especificamente Thumbs.db 
    /// </summary>
    private void limpiar()
    {
        foreach (GridViewRow row in GridViewFormCartas.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                HyperLink hl = (HyperLink)row.Cells[0].Controls[0];
                
                if (hl.Text == "Thumbs.db")
                {
                    hl.Enabled = false;

                }

            }
        }
    }

    /// <summary>
    /// Evento llamado al hacer click en el boton Subir. toma el archivo que se va a subir
    /// Se verifica que el archivo no exista, si no existe  se guarada en la carpeta del proyecto /Archivo/Formatos/
    /// Se guarda el registro en la base de datos
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>

    protected void ButtonSubirArchivo_Click1(object sender, EventArgs e)
    {
        if ((FileFormato.PostedFile != null) && (FileFormato.PostedFile.ContentLength > 0))
        {
            string fn = System.IO.Path.GetFileName(FileFormato.PostedFile.FileName);
            string SaveLocation;
            if(CheckBoxFormatoCartas.Checked)
                SaveLocation = Server.MapPath("FormCartas") + "\\" + fn;
            else
                SaveLocation = Server.MapPath("Formatos") + "\\" + fn;

            try
            {
                FileFormato.PostedFile.SaveAs(SaveLocation);
                if (!CheckBoxFormatoCartas.Checked)
                {
                    GestionarArchivos archivo = new GestionarArchivos();
                    if (archivo.SubirFormatos(fn) == true)

                        LabelNotificacion.Text = "Archivo subido con éxito";
                    else
                        LabelNotificacion.Text = "Un archivo con el mismo nombre ha sido subido";
                }
                LabelNotificacion.Text = "Archivo subido con éxito";
            }
            catch(Exception ex)
            {
                LabelNotificacion.Text = "No se pudo subir el archivo";                
            }
        }
        else
        {
            LabelNotificacion.Text = "Seleccione un archivo";
            

        }
        if (!CheckBoxFormatoCartas.Checked)
            BuscarArchivos();
        else
            CargarFormatos();
    }

    /// <summary>
    /// Elimina el archivo seleccionado por el usuario
    /// se verifica que el archivo exista en la carpeta especificada.
    /// Se elimina el archivo de la carpeta y el registro de la base de datos
    /// </summary>
    /// <param name="id">(int) Identificador del archivo</param>
    /// <param name="nombreArchivo">(string) Nombre del archivo a eliminar</param>
    private void EliminarArchivo(int id, string nombreArchivo)
    {
        try
        {
            FileInfo TheFile = new FileInfo(Server.MapPath("Formatos") + "\\" + nombreArchivo);

            if (TheFile.Exists)
            {
                //LabelNotificacion.Text = "Existe";
                GestionarArchivos archivo = new GestionarArchivos();
                if (archivo.EliminarArchivo(id) == true)
                {
                    File.Delete(Server.MapPath("Formatos") + "\\" + nombreArchivo);
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "$.modaldialog.success('Archivo eliminado', {timeout: 3 , showClose: false });", true);
                }
                else
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "$.modaldialog.error('No se puede eliminar este archivo, tiene tareas asociadas', {timeout: 3 , showClose: false });", true);
            }
            else
                LabelNotificacion.Text = "NO Existe";
        }
        catch
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "$.modaldialog.error('No se pudo completar esta operación', {timeout: 3 , showClose: false });", true);
        }
        finally
        {
            BuscarArchivos();
        }
    }

    /// <summary>
    /// Elimina el archivo seleccionado por el usuario
    /// se verifica que el archivo exista en la carpeta especificada.
    /// se cargan los formatos de cartas
    /// </summary>
    /// <param name="nombreArchivo">Nombre del archivo a eliminar</param>

    private void EliminarFormCarta(string nombreArchivo)
    {
        try
        {
            FileInfo TheFile = new FileInfo(Server.MapPath("FormCartas") + "\\" + nombreArchivo);

            if (TheFile.Exists)
            {
                //LabelNotificacion.Text = "Existe";
                try
                {
                    File.Delete(Server.MapPath("FormCartas") + "\\" + nombreArchivo);
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "$.modaldialog.success('Archivo eliminado', {timeout: 3 , showClose: false });", true);
                }
                catch
                {
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "$.modaldialog.error('No se puede eliminar este archivo, tiene tareas asociadas', {timeout: 3 , showClose: false });", true);
                }
            }
            else
                LabelNotificacion.Text = "NO Existe";
        }
        catch
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "$.modaldialog.error('No se pudo completar esta operación', {timeout: 3 , showClose: false });", true);
        }
        finally
        {
            CargarFormatos();
            Response.Redirect("FrSubirFormatos.aspx");
        }
    }

}
